標籤:語言功能
收集管線
收集管線是一種程式設計模式,您可以在其中將一些運算組織成一系列的作業,這些作業透過將一個作業的輸出作為另一個作業的輸入來組合而成。(常見的作業有篩選、對應和簡化。)這種模式在函式程式設計中很常見,在具有 lambda 的物件導向語言中也很常見。本文說明了這種模式,並提供了幾個如何形成管線的範例,既可以向不熟悉這種模式的人介紹這種模式,也可以幫助人們了解核心概念,以便他們可以更輕鬆地從一種語言取得想法並套用在另一種語言上。
存取修飾詞
物件導向語言將程式區分為稱為類別的模組。每個類別都包含功能,這些功能包含資料 (欄位) 和方法。(並非所有語言都使用這些術語,但它們適用於此。)語言有各種規則,說明哪些其他類別可以存取類別的功能,這些規則通常基於適用於類別的存取修飾詞。
註解
程式元素 (通常是類別、方法或欄位) 上的註解是新增到該程式元素的一段元資料,可用於使用額外的程式碼來修飾該元素。
呼叫父類別
呼叫父類別是一種輕微的異味 (或反模式,如果您喜歡的話),會不時出現在物件導向架構中。它的症狀很容易發現。您繼承自父類別,以便插入某些架構。文件說明類似「要執行自己的操作,只需建立處理方法的子類別。但是,請務必記住,使用呼叫父類別來開始您的方法」。範例可能是像這樣的內容。
類別實例變數
當你學習物件時,通常會學到它們可以擷取兩種資料:實例和類別。實例變數是最常見的情況,資料會隨著物件的每個實例而有所不同。類別變數,通常稱為靜態變數,會在類別的所有實例中共享。每個實例都指向相同的值,而且所有變更都會被所有人看到。類別變數比實例變數少見得多,尤其是可變類別變數。
動態型別
我長期以來一直不願意在程式語言中的靜態和動態型別之間的爭論中寫任何文章。這是那些情緒化話題之一,人們似乎更傾向於辯論而不是傾聽。但由於我被問過幾次,我將貢獻我的個人經驗。我並不是想說服任何人,但我希望有人能從中找到一些思考的材料。
函式作為物件
在程式設計中,物件的基本概念是將資料和行為綑綁在一起。這在撰寫一組相關函式時提供了一個通用的資料內容。它還提供了一個用於處理資料的介面,允許物件控制對該資料的存取,使其易於支援衍生資料並防止資料無效修改。許多語言提供明確的語法來定義類別,這些類別充當物件的定義。但是,如果你有一個具有一等函式和閉包的語言,則可以使用這些結構來使用函式作為物件模式(最初由 Eugene Wallingford 描述)建立物件。
Javascript Promise
在 Javascript 中,承諾是表示非同步操作的待處理結果的物件。您可以使用這些承諾,在非同步操作完成後,透過提供回呼來排定進一步的活動。
Lambda
由於對動態語言的興趣日益濃厚,越來越多的人接觸到一個稱為 Lambda(也稱為閉包、匿名函數或區塊)的程式設計概念。具有 C/C++/Java/C# 語言背景的人沒有 Lambda,因此不確定它們是什麼。以下是一個簡短的說明,對於已經使用具備 Lambda 的語言進行大量程式設計的人來說,可能會覺得這沒什麼意思。
學習物件的語言
如果我想教別人物件導向,我應該使用哪種語言?
清單和雜湊
現在,許多程式設計環境中都以清單和雜湊映射的複合方式來表示資料結構。大多數主要語言現在都提供這些資料結構的標準版本,以及豐富的運算範圍,特別是 集合管線,用於操作這些資料結構。這些資料結構非常靈活,讓我們能夠以易於處理和操作的方式表示大多數形式的階層。
受保護資料
在具有 受保護 存取修飾詞的類別中儲存資料,這是否屬於良好的物件導向設計?
公開的 C# 欄位
當我第一次接觸 C# 時,我就喜歡屬性的概念。C++/Java 的 getX 和 setX 約定對我來說總是顯得有點愚蠢,寫成 obj.X = other.X
自然多了。提供具有取得和設定方法的屬性,會將常見的約定轉變為語言的自然支援功能。
已發布介面
已發布介面 是我使用的術語(首次出現在 重構 中),用於指在定義它的程式碼庫外部使用的類別介面。因此,它的意義比 Java 中的公開更多,甚至比 C# 中的非內部公開更多。我在 IEEE 軟體的專欄中論證,已發布和公開之間的區別實際上比公開和私有之間的區別更重要。
Smalltalk 書籍
偶爾會遇到想了解 Smalltalk 並試用看看的人。我以前 最喜歡的 Smalltalk 入門書籍 已經絕版,但我剛發現現在可以 從這裡下載,還有許多其他與 Smalltalk 相關的資料。這些資料由 Stéphane Ducasse 提供,他曾共同撰寫一本關於 重構模式 的優秀書籍。
語法雜訊
在討論 特定領域語言(或任何電腦語言)時,一個常見的說法是雜訊語法。人們可能會說 Ruby 比 Java 的雜訊較少,或外部 DSL 比內部 DSL 的雜訊較少。人們所說的語法雜訊,是指不屬於我們真正需要表達內容的額外字元,但卻存在於滿足語言定義中。雜訊字元很糟糕,因為它們會模糊程式碼的意義,迫使我們必須費心找出程式碼在做什麼。
透明編譯
越來越多的網頁開發人員使用 CoffeeScript 和 SCSS 等語言,編譯成其他在瀏覽器中執行的文字來源語言。這種來源到來源的編譯器(也稱為轉譯器)並非新鮮事,Cfront 在 C++ 早期廣泛用於產生目標 C 程式碼。但對我來說,有一個差異讓 CoffeeScript 和 SCSS 成為透明編譯器
統一存取原則
模組提供的服務都應該透過統一的表示法取得,不會洩漏這些服務是透過儲存或運算來實作的。
-- 貝特朗·梅爾
貝特朗·梅爾在他的極具影響力的著作 物件導向軟體建構 中提出這個原則。
這個原則的基本重點是,如果你有一個人物物件,並且詢問它的年齡,你應該使用相同的表示法,無論年齡是物件的儲存欄位或計算值。這實際上表示人物的客戶端不應該知道或關心年齡是儲存的還是計算的。
前往奧胡斯 2011
goto(以前稱為 JAOO)一直是我最喜歡的研討會。多年來,他們在維持高水準的內容,同時結合有效率且友善的組織方面做得很好。因此,儘管我過度參加研討會通常會導致研討會恐懼症,但我仍然在前往奧胡斯這個有點複雜的旅程時感到一絲愉快的期待。